在完成上述的入门知识学习之后,我们要向专业的计算机软件开发进军了。但是在学习那些专业的知识前,我们先要抽一部分的篇幅来说一下程序员的修养。这是程序员的工程师文化,也就是程序员的价值观,因为如果你的技术修养不够的话,你学再多的知识也是没有用的。
要了解程序员的修养,你可以先从 Quora 上的这个贴子开始 “What are some of the most basic things every programmer should know?”,我摘录一些在这里供你参考。
然后是 《97 Things Every Programmer Should Know》,其中有 97 个非常不错的编程方面的建议。这篇文章是比较经典的,别被 "97" 吓住,你可以快速浏览一下,会让你有不同的感觉的。另外,在工作一段时间后再来读,你会更有感觉。
必须指出,再往下走,有一个技能非常重要,那就是英文。如果对这个技能发怵的话,那么你可能无缘成为一个程序员高手了。因为我们所有的计算机技术全部来自于西方国家,所以如果你要想成为一个高手的话,那么必须到信息的源头去。英文的世界真是有价值的信息的集散地。你可以在那里,到官网上直接阅读手册,到 StackOverflow 上问问题,到 YouTube 上看很多演讲和教学,到 GitHub 上参与社区,用 Google 查询相关的知识,到国际名校上参加公开课……
如果你的英文能力有问题的话,那么基本上来说,你无法成为一个高手。因此,学好英文是非常有必要的,我说的不只是读写,还有听和说。相信你在学校里学过英文,有一定的基础。所以,我给你下面的这些建议。
提问的智慧(How To Ask Questions The Smart Way)一文最早是由 Eric Steven Raymond 所撰写的,详细描述了发问者事前应该做好什么,而什么又是不该做的。作者认为这样能让问题容易令人理解,而且发问者自己也能学到较多东西。
此文一经发出,就广受好评,被广泛转载并奉为经典。该文也有 简体中文翻译版 被流传着,所以在华人界也是篇很有名的文章。有两个著名的缩写 STFW(Search the fxxking web)以及 RTFM(Read the fxxking manual)就是出自本文。
另外,还有一个经典的问题叫 X-Y Problem。对我来说,这是一个很容易犯的错误,所以,你也要小心避免(我曾经在我的 Coolshell 上写过这个事《X-Y 问题》)。
然后,你可以到 StackOverflow 上看看如何问问题的一些提示 -- “FAQ for StackExchange Site”。
作为一个程序员,不做伸手党,你必需要读一读这几篇文章,并努力践行。
除了《代码大全》外,你还需要补充一些如何写好代码的知识,有以下几本书推荐。
另外,作为一个程序员,Code Review 是非常重要的程序员修养。 Code Review 对我的成长非常有帮助,我认为没有 Code Review 的公司都没有必要呆(因为不做 Code Review 的公司一定是不尊重技术的)。下面有几篇我觉得还不错的 Code Review 的文章,供你参考。
除了 Code Review 之外,Unit Test 也是程序员的一个很重要的修养。写 Unit Test 的框架一般来说都是从 JUnit 衍生出来的,比如 CppUnit 之类的。学习 JUnit 使用的最好方式就是到其官网上看 JUnit User Guide(中文版)。然后,有几篇文章你可以看看(也可以自行 Google):
在代码中没有最基本的安全漏洞问题,也是我们程序员必需要保证的重要大事,尤其是对外暴露 Web 服务的软件,其安全性就更为重要了。对于在 Web 上经常出现的安全问题,有必要介绍一下 OWASP - Open Web Application Security Project。
OWASP 是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究。其被视为 Web 应用安全领域的权威参考。2009 年,国际信用卡数据安全技术 PCI 标准将其列为必要组件,美国国防信息系统局、欧洲网络与信息安全局、美国国家安全局等政府机构所发布的美国国家和国际立法、标准、准则和行业实务守则参考引用了 OWASP。
美国联邦贸易委员会(FTC)强烈建议所有企业需遵循 OWASP 十大 Web 弱点防护守则。所以,对于[https://www.owasp.org/index.php/Category:OWASP_T](http://localhost:8080/01 左耳听风/html版本/ op_Ten_Project">OWASP Top 10 项目 是程序员非常需要关注的最基本的也是最严重的安全问题,现在其已经成了一种标准,这里是其中文版《OWASP Top 10 2017 PDF 中文版》。
下面是安全编程方面的一些 Guideline。
此外,有一篇和 HTTP 相关的安全文章也是每个程序员必需要读的——《Hardening Your HTTP Security Headers》。
最后想说的是 " 防御性编程 ",英文叫Defensive Programming,它是为了保证对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。防御式编程主要用于可能被滥用,恶作剧或无意地造成灾难性影响的程序上。下面是一些文章。
系统上线是一件比较严肃的事,这表明你写的软件不是跑在自己的机器上的玩具,或是实验室里的实验品,而是交互给用户使用的,甚至是用户付费的软件。对于这样的软件或系统,我们需要遵守一些上线规范,比如,需要认真测试,并做上线前检查,以及上线后监控。下面是几个简单的规范,供你参考。
好了,总结一下今天分享的主要内容。程序员修养看似与程序员练级关系不大,实际上却能反映出程序员的工程师特质和价值观,决定了这条路你到底能走多远。有修养的程序员才可能成长为真正的工程师和架构师,而没有修养的程序员只能沦为码农。
因此,在这篇文章中,我指出了我认为比较重要的几个方面:英文能力、问问题的能力、写代码的修养、安全防范意识、软件工程和上线规范等。这些能力的训练和培养将为后续的学习和发展夯实基础。
我们在写代码时,最好参考一些已有的最佳实践。为什么要有编程规范和最佳实践,要让所有人按一定的规范来编程呢?有下面几个主要原因。
如果一个程序员没有这类规范和最佳实践的沉淀,那么是很难成为真正的程序员的,只能沦为码农。
当然,对于一些代码风格方面的东西,比如左大括号是否要换行,缩进是用 tab 还是空格等等,我觉得没有对错,只要团队统一就好了。
下面,我罗列了一堆各种语言的编程规范,供你参考。
C 语言
C++ 语言
Go 语言
Java 语言
JavaScript 语言
还有一些其它相对比较简单的 JavaScript 编程规范。
PHP 语言
Python 语言
Ruby 语言
Rust 语言
Scala 语言
Shell 语言
Node.js 相关
Mozilla 的编程规范
最后是一个前端开发的各种注意事项列表,非常有用。
Kotlin
Objective-C 语言
Swift 语言
Markdown 相关
JSON
Git 相关
正则表达式相关